package com.menu.Mapper;

import com.menu.Pojo.Goods;
import com.menu.Pojo.GoodsVo;
import org.apache.ibatis.annotations.Param;

import java.sql.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public interface GoodsMapper {
    /**
     * 通过id查询
     * @param goodsId
     */
    Goods selectById(Integer goodsId);


    /**
     * 减少库存
     * @param goodsId
     * @param goodsNumber
     * @return
     */
    Integer decGoodsStore(@Param("goodsId") Integer goodsId,@Param("goodsNumber") Integer goodsNumber);



    /**
     * 添加商品
     * @param goods
     * @return
     */
    Integer add(Goods goods);

    /**
     * 更新图片
     * @param goodsSurfaceimg
     * @return
     */
    Integer updateImg(@Param("goodsId") Integer goodsId,@Param("goodsSurfaceimg") String goodsSurfaceimg);

    /**
     * 修改商品信息
     * @param goods
     * @return
     */
    Integer modifyGoods(Goods goods);

    /**
     * 查找所有goodsId
     * @return
     */
    List<Integer> selectGoodsId();

    /**
     * 更新销售量
     * @param goodsId
     * @param goodsSales
     */
    void updateGoodsSales(@Param("goodsId") Integer goodsId,@Param("goodsSales") Integer goodsSales);

    /**
     * 恢复商品库存
     * @param orderId
     */
    int recoverGoodsNUmber(Long orderId);

    /**
     * 分页查询
     * @return
     */
    List<Goods> selectByPage(@Param("state") Integer state,@Param("classify") String classify);

    /**
     * 模糊搜索
     * @param information
     * @return
     */
    List<Goods> visualSearch(@Param("information") String information,@Param("state") Integer state);


    /**
     * 计算销售排行
     * @return
     */
    List<HashMap<String, Object>> salesList();


    /**
     * 商品访问量
     */
    void insertVisit(@Param("count") Integer count,@Param("type")Integer type);

    /**
     * 计算访问量
     * @return
     */
    Integer countVisit(@Param("type") Integer type,@Param("day") Integer day);

    /**
     * 计算所有访问量
     * @return
     */
    Integer countVisitTotal(Integer type);

    /**
     * 计算库存余量
     * @return
     */
    Integer countLeave();

    /**
     * 同步数据库
     * @param result
     */
    Integer insertIpVisit(int result);

    /**
     * 计算较昨天
     */
    Map<String, Object> fromPreYesterday();

    /**
     * 计算较上周
     * @return
     */
    Map<String, Object> fromPreWeek();

    /**
     * 计算较上月
     * @return
     */
    Map<String, Object> fromPreMonth();

    /**
     * 计算较上年
     * @return
     */
    Map<String, Object> fromPreYear();

    /**
     * 计算每个月
     * @param type
     * @param month
     * @return
     */
    Integer countAnnual(@Param("type") Integer type, @Param("month") Integer month,@Param("year")Integer year);

    /**
     * 获取成交率
     * @param state
     * @return
     */
    List<Double> selectByType(@Param("state") Integer state);

    /**
     *
     * 获取销售最多的排行
     * @return
     */
    List<GoodsVo> choicenessList();
}
